home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / MacTCP Library 1.1 / Library / HighLevel ƒ / Source ƒ / HighLevelUDP.c < prev   
Encoding:
C/C++ Source or Header  |  1995-12-04  |  2.3 KB  |  121 lines  |  [TEXT/SPM ]

  1. /*
  2.     HighLevelUDP.c
  3.  
  4.     high-level UDP I/O functions
  5.  
  6.     12/04/95 dn - Created.
  7. */
  8.  
  9. #include <HighLevelUDP.h>
  10.  
  11. #include <SegLoad.h>
  12. #include <OSUtils.h>
  13.  
  14. #if defined(SYMANTEC_C)||defined(THINK_C)
  15. #define inline
  16. #endif
  17.  
  18. #if defined(SYMANTEC_C)||defined(THINK_C)
  19. #else
  20. #pragma mark -
  21. #pragma mark •• High-level UDP Functions ••
  22. #endif
  23. OSErr udpCreate(StreamPtr *stream,ProcPtr udpNotifyProc,Ptr buffer, long bufsize){
  24.     OSErr err=noErr;
  25.     UDPiopb udp;
  26.     UDPNotifyUPP notify;
  27.     
  28.     if (buffer == NULL){
  29.         if (bufsize == 0)
  30.             bufsize = 16*1024;
  31.         
  32.         buffer=NewPtr(bufsize);
  33.     }
  34.     
  35.     notify=NewUDPNotifyProc(udpNotifyProc);
  36.     
  37.     udp.csParam.create.rcvBuff=buffer;
  38.     udp.csParam.create.rcvBuffLen=bufsize;
  39.     udp.csParam.create.notifyProc=notify;
  40.     udp.csParam.create.endingPort=0;
  41.     
  42.     err=UDP_Create(&udp,false);// create the stream...
  43.     
  44.     *stream = err ? 0 : udp.udpStream;
  45.     
  46.     return err;
  47. }
  48.  
  49. OSErr udpSend(ip_addr host,udp_port port,StreamPtr stream,Ptr data,unsigned short len,Boolean push,Boolean urgent){
  50.     UDPiopb udp;
  51.     wdsEntry en[2];
  52.     
  53.     en[0].length=len;
  54.     en[0].ptr=data;
  55.     
  56.     en[1].length=0;
  57.     en[1].ptr=0;
  58.     
  59.     udp.udpStream=stream;
  60.     
  61.     udp.csParam.send.remoteHost=host;
  62.     udp.csParam.send.remotePort=port;
  63.     udp.csParam.send.reserved=0; // docs say this must be set to zero
  64.     udp.csParam.send.filler=0;
  65.     
  66.     udp.csParam.send.wdsPtr=(char*)en;
  67.     
  68.     return UDP_Write(&udp,false); // send data synchronously...
  69. }
  70.  
  71. OSErr udpRead(ip_addr host,udp_port port,StreamPtr stream,Ptr data,unsigned short *len){
  72.     OSErr err=noErr;
  73.     UDPiopb udp;
  74.     
  75.     udp.udpStream=stream;
  76.     
  77.     udp.csParam.receive.remoteHost=host;
  78.     udp.csParam.receive.remotePort=port;
  79.     udp.csParam.receive.timeOut=0;
  80.     udp.csParam.receive.rcvBuff = (char*) data;
  81.     udp.csParam.receive.rcvBuffLen = *len;
  82.     
  83.     err=UDP_Read(&udp,false);// Do a synchronous read...
  84.     
  85.     *len = udp.csParam.receive.rcvBuffLen;
  86.     
  87.     return err;
  88. }
  89.  
  90. OSErr udpReturnBuffers(StreamPtr stream,rdsEntry *rds){
  91.     UDPiopb udp;
  92.     
  93.     udp.udpStream=stream;
  94.     
  95.     udp.csParam.receive.rcvBuff=(char*)rds;
  96.     
  97.     return UDP_BfrReturn(&udp,false);
  98. }
  99.  
  100. OSErr udpRelease(StreamPtr stream,Ptr *buffer, long *bufsize){
  101.     UDPiopb udp;
  102.     OSErr err;
  103.     
  104.     udp.udpStream=stream;
  105.     
  106.     err=UDP_Release(&udp,false);
  107.     
  108.     if (buffer != NULL)
  109.         *buffer = udp.csParam.create.rcvBuff;
  110.     else
  111.         DisposePtr(udp.csParam.create.rcvBuff);
  112.     
  113.     if (bufsize != NULL)
  114.         *bufsize = udp.csParam.create.rcvBuffLen;
  115.     
  116.     return err;
  117. }
  118.  
  119.  
  120.  
  121.